package cn.moon.utils;

import java.util.ArrayList;
import java.util.List;


public class TableUtils {

    private static final char PLUS = '+';

    private static final char MINUS = '-';

    private static final char SPACE = ' ';

    private int maxWidth;

    private final List<String> fields = new ArrayList<>();

    public void addRow(Object field){

        String str = String.valueOf(field);

        fields.add(str);

        if(str.length() > maxWidth){
            maxWidth = str.length();
        }
    }

    @Override
    public String toString(){

        int rowNum = fields.size();

        if(rowNum <= 0){
            return "";
        }

        StringBuilder sb = new StringBuilder();



        for(int i = 0; i < rowNum; i++){

            if(i != 0){
                {
                    String field = fields.get(i);
                    sb.append('|');
                    sb.append(SPACE);
                    sb.append(field);

                    for(int j = 0; j < maxWidth - field.length(); j++){
                        sb.append(SPACE);
                    }

                    sb.append(SPACE);

                    sb.append('|');
                    sb.append('\n');

                }
            }else {

                // 首行开头
                sb.append(PLUS);
                sb.append(MINUS);

                for(int w = 0; w < maxWidth; w++){
                    sb.append(MINUS);
                }

                sb.append(MINUS);
                sb.append(PLUS);

                sb.append('\n');

                String field = fields.get(i);
                sb.append('|');
                sb.append(SPACE);
                sb.append(field);

                for(int j = 0; j < maxWidth - field.length(); j++){
                    sb.append(SPACE);
                }

                sb.append(SPACE);

                sb.append('|');
                sb.append('\n');


                // 首行结尾
                sb.append(PLUS);
                sb.append(MINUS);
                for(int w = 0; w < maxWidth; w++){
                    sb.append(MINUS);
                }

                sb.append(MINUS);


                sb.append(PLUS);
                sb.append('\n');
            }

        }

        // 结尾行
        sb.append(PLUS);
        sb.append(MINUS);

        for(int w = 0; w < maxWidth; w++){
            sb.append(MINUS);
        }

        sb.append(MINUS);
        sb.append(PLUS);

        sb.append('\n');

        return sb.toString();
    }


}